package trabalho1dr;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author diogomartins
 */
public class PasswordChecker01 {
    private String password;
    private String classificacao;
    private int pontos = 0;
    private int length;    
           
    private void pontuarComprimento(){
        if ( (this.length > 0) && (this.length < 5) ) {
            this.pontos += 3;
        } else if (this.length > 5 && this.length < 8) {
            this.pontos += 6;
        } else if (this.length > 7 && this.length < 16) {
            this.pontos += 12;
        } else if (this.length > 16) {
            this.pontos += 18;
        }        
    }

    public PasswordChecker01(String password) {
        this.password = password;
        this.length = this.password.length();
    }
    
    private void pontuarLetras(){
        if ( this.temMaiuscula(this.password) )
            this.pontos += 5;
        if ( this.temMinuscula(this.password) )
            this.pontos += 2;               
    }
    
    private boolean temMinuscula(String str){
        return str.matches("[a-z]");
    }
    
    private boolean temMaiuscula(String str){
        return str.matches("[A-Z]");
    }
    
    private void pontuarDigitos(){
        if ( this.temDigito(this.password) )
            this.pontos += 5;
        if ( this.temPeloMenosTresDigitos(this.password) )
            this.pontos += 5;
    }
    
    private boolean temDigito(String str){
        return str.matches("[0-9]");
    }
    
    private boolean temPeloMenosTresDigitos(String str){
        return str.matches(".*[0-9].*[0-9].*[0-9]");
    }
      
    private void pontuarSimbolos(){        
        if ( this.temSimbolo(this.password, 2) )
            this.pontos += 10;                   
        else if ( this.temSimbolo(this.password, 3) )
            this.pontos += 5;               
    }
    
    private boolean temSimbolo(String str, int quantidade){
        String simbPattern = ".*[!@#$%^&*?_~]";
        for (int i = 0; i < quantidade; i++) {
            simbPattern = simbPattern + simbPattern;
        }        
        return str.matches(simbPattern);
    }
    
    //private int pontuarLetras(){}
    //private int pontuarBonus(){}
    
    public void classificarPassword(){        
        if (this.pontos >= 15 && pontos<25)   
            this.classificacao = "Fraca";
        else if (pontos>=25 && pontos<35)
            this.classificacao =  "Média";           
        else if (pontos>=35 && pontos<45)
            this.classificacao =  "Forte";
        else if (pontos>=45)
            this.classificacao =  "Muito Forte";        
        else
            this.classificacao =  "Muito Fraca";
    }
    
    public void printPontuacao(){
        System.out.println("Pontuação = " + this.pontos);
    }
    
    public void printClassificacao(){
        System.out.println("Classificação = " + this.classificacao);
    }
            
    public String getPassword(){
        return this.password;
    }
    
}
